#include <stdlib.h> 
#include <stdio.h>
#define MaxSize	100
 
/*
	链式存储队列 
*/ 

typedef int dataType;
typedef struct Node{
	dataType data;
	struct Node *Next;
}QNode; 

typedef struct {
	QNode *front;
	QNode *rear;
	int length; 
}LinkQueue; 

/*
	(1) 创建一个带头结点的空队。
	 需要先申请一块内存存放头结点，还需要一块内存存放头尾指针 
*/
LinkQueue *Init_LQueue(){
	LinkQueue *PtrQ = (LinkQueue*)malloc(sizeof(LinkQueue));
	QNode *head = (QNode*)malloc(sizeof(QNode));
	head->Next = NULL;
	PtrQ->front = head;
	PtrQ->rear = head;
	PtrQ->length = 0;
	return PtrQ;
}

/*入队操作，队列有固定长度*/
void In_LQueue(LinkQueue *PtrQ , dataType x){
	//检查队列是否已满，为了避免重复遍历链表来求长度，可以在LinkQueue中维护一个length字段
	if( PtrQ->length < MaxSize ){
		//申请一个节点
		QNode *newNode = (QNode*)malloc(sizeof(QNode));
		newNode->data = x;
		newNode->Next = NULL;
		
		//将新申请的节点append到链表后面
		PtrQ->rear->Next =  newNode;
		PtrQ->length++;
		//移动队列的尾指针
		PtrQ->rear =  newNode;
	}else{
		puts("队列已满");
		exit(0); 
	}
}

dataType Out_LQueue( LinkQueue *PtrQ ){
	//出队操作，头出尾进，非空对
	if( q->length > 0 ){
		QNode *head = PtrQ->front;
		PtrQ->front = head->Next;
		free(head);
		return PtrQ->front->data; 
	} else{
		puts("队列为空队列");
		exit(0); 
	}
}

dataType 
	

int main(){
	return 0;
}

